package com.yanti.common.constant;

public class RedisConstants {
    /**
     * 验证码 KEY 前缀
     */
    public static final String VERIFICATION_CODE_KEY_PREFIX = "verification_code:";

    /**
     * 研题 ID 生成器 KEY
     */
    public static final String YANTI_ID_GENERATOR_KEY = "yanti_id_generator";

    /**
     * 用户角色数据 KEY 前缀
     */
    public static final String USER_ROLES_KEY_PREFIX = "user:roles:";

    /**
     * 角色对应的权限集合 KEY 前缀
     */
    public static final String ROLE_PERMISSIONS_KEY_PREFIX = "role:permissions:";

    /**
     * 用户临时学习时间 KEY 前缀
     */
    public static final String USER_TEMPORARY_STUDY_TIME_PREFIX = "temp_question_time:";

    /**
     * 用户当天刷题数 KEY 前缀
     */
    public static final String USER_TODAY_QUESTION_COUNT_PREFIX = "question_count:";

    public static final String USER_QUESTION_COUNT_PREFIX = "question_count:";
    /**
     * 用户当天学习时间 KEY 前缀
     */
    public static final String USER_TODAY_STUDY_TIME_PREFIX = "today_study_time:";

    // 过期时间，20分钟
    public static final long CODE_EXPIRE_TIME = 20;

    /**
     * 构建验证码 KEY
     * @param phone 手机号
     * @return 验证码 KEY
     */
    public static String buildVerificationCodeKey(String phone) {
        return VERIFICATION_CODE_KEY_PREFIX + phone;
    }
    /**
     * 构建验证码 KEY
     * @param phone 手机号
     * @return
     */
    public static String buildUserRoleKey(String phone) {
        return USER_ROLES_KEY_PREFIX + phone;
    }

    /**
     * 构建角色对应的权限集合 KEY
     * @param roleId 角色 ID
     * @return
     */
    public static String buildRolePermissionsKey(Long roleId) {
        return ROLE_PERMISSIONS_KEY_PREFIX + roleId;
    }

    /**
     * 构建用户临时学习时间 KEY
     * @param userId
     * @param dateKey
     * @return
     */
    public static String buildUserTemporaryStudyTimeKey(String userId, String dateKey) {
        return USER_TEMPORARY_STUDY_TIME_PREFIX + userId + ":" + dateKey;
    }

    /**
     * 构建用户当天刷题数 KEY
     * @param userId
     * @return
     */
    // todo 统计刷题数逻辑要改，更改redis的键的设计，改为question_count:userId:dateKey:题号，或者是hash结构
    public static String buildUserTodayQuestionCountKey(String userId){
        return USER_TODAY_QUESTION_COUNT_PREFIX + userId;
    }
    /**
     * 构建用户当天学习时间 KEY
     * @param userId
     * @return
     */
    public static String buildUserTodayStudyTimeKey(String userId, String dateKey){
        return USER_TODAY_STUDY_TIME_PREFIX + userId + ":" + dateKey;
    }
    public static String buildUserQuestionCountKey(String userId, String dateKey){
        return USER_QUESTION_COUNT_PREFIX + userId + ":" + dateKey;
    }
}
